const fft = require('fft-js').fft
const ifft = require('fft-js').ifft
// 输入：时域波形数据，采样频率, 输出：倒谱
const get_cep_strum =  (signal, sampleRate)=> {
    // Step 1: 计算信号的FFT（快速傅里叶变换）
    const spectrum = fft(signal)
    // Step 2: 取对数幅度
    const logSpectrum = spectrum.map(value => Math.log(Math.abs(value) + Number.EPSILON) )
    // Step 3: 计算对数幅度的IFFT（快速傅里叶逆变换）
    const cepstrum = ifft(logSpectrum).map(value => value.real)
    // 计算对数频率（quefrency）轴上的时间点
    const quefrencyAxis = Array.from({length: signal.length}, (_, i) => i / sampleRate)
    return {cepstrum, quefrencyAxis}
}

const sampleRate = 1000;  // 采样频率
const duration = 1;  // 信号持续时间
const samples = duration * sampleRate;  // 采样点数
const t = Array.from({length: samples}, (_, i) => i / sampleRate);  // 时间向量
const f1 = 50;  // 频率1
const f2 = 100;  // 频率2
const signal = t.map(time => 0.6 * Math.sin(2 * Math.PI * f1 * time) + 0.3 * Math.sin(2 * Math.PI * f2 * time));  // 生成信号
// 计算倒谱
const {cepstrum, quefrencyAxis} = get_cep_strum(signal, sampleRate);
// 输出结果

